package toOffer;

/**
 * <h3>leetcode</h3>
 *
 * @author BigFaceCat
 * @date 2024/1/20 17:41
 * @description <p>乘积小于 k 的子数组 </p>
 */

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 题目：输入一个由正整数组成的数组和一个正整数 k，请问数组中有多
 * 少个数字乘积小于 k 的连续子数组？例如，输入数组[10, 5, 2, 6]，k 的值为
 * 100，有 8 个子数组的所有数字的乘积小于 100，它们分别是[10]、[5]、[2]、
 * [6]、[10, 5]、[5, 2]、[2, 6]和[5, 2, 6]。
 */
public class toOffer2_2_9 {
    public static void main(String[] args) {
        int[] nums = {10, 5, 2, 6};
        List<List<Integer>> funList = fun(nums, 100);
        for (List<Integer> list : funList) {
            for (Integer integer : list) {
                System.out.print(integer + " ");
            }
            System.out.println();
        }
    }

    /**
     * @param nums
     * @param k
     * @return
     */
    public static List<List<Integer>> fun(int[] nums, int k) {
        ArrayList<List<Integer>> list = new ArrayList<>();

        int slow = 0;
        int len = nums.length;
        int multip = 1;

        for (int fast = 0; fast < len; ++fast) {
            multip *= nums[fast];
            while (slow <= fast && multip >= k) {
                multip /= nums[slow];
                slow++;
            }
            // todo
            list.add(Arrays.stream(nums).boxed().collect(Collectors.toList()).subList(slow, fast + 1));

        }
        return list;
    }
}


